import java.util.Arrays;

public class 每个元音包含偶数次的最长子字符串 {

    public int findTheLongestSubstring(String s) {
        int n = s.length();
        int[] map = new int[100]; // 存储 11111 aeiou 的值
        Arrays.fill(map,-2); // 开始全部设置为 -2, 代表没有访问过
        map[0] = -1; // 为 0 的时候就是没有元音, 需要进行初始化成 -1, 到时候就不需要下标 + 1
        int ans = 0;
        for (int i = 0,sum = 0; i < n; i++) {
            int m = move(s.charAt(i)); // 找到一个元素, 如果是元音看看需要移几位
            if (m != 5) { // 是元音, 不是元音就不需要进行移动
                sum ^=  (1 << m); // 0 为偶数, 1 为奇数
            }
            // 如果此时前缀和不为空, 就更新
            if (map[sum] != -2) {
                ans = Math.max(ans,i - map[sum]);
            } else {
                // 为空更新一下
                map[sum] = i;
            }
        }
        return ans; // 返回 ans
    }

    private int move(char ch) {
        switch (ch) {
            // 移位次数
            case 'a' : return 0;
            case 'e' : return 1;
            case 'i' : return 2;
            case 'o' : return 3;
            case 'u' : return 4;
            default : return 5;
        }
    }
}
